package com.tianshi.order.service.impl;



import com.tianshi.entity.Products;
import com.tianshi.vo.CartVO;
import com.tianshi.entity.CartItems;
import com.tianshi.entity.Carts;
import com.tianshi.order.feign.client.ProductFeignClient;
import com.tianshi.order.mapper.CartItemMapper;
import com.tianshi.order.mapper.CartMapper;
import com.tianshi.order.service.CartService;
import com.tianshi.vo.ProductVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.List;


@Service
@Slf4j
public class CartServiceImpl implements CartService {
    @Autowired
    private CartMapper cartMapper;
    @Autowired
    private CartItemMapper cartItemMapper;
    @Autowired
    private ProductFeignClient productFeignClient;
    /*
     * 商品加入购车
     * */
    @Override
    public Integer addCart(Long productId, Long userId) {
        //获取购物车，一个用户对应一个购物车
        Carts cart=cartMapper.getCartByUserId(userId);
        if(cart==null){ //当前用户没有购物车，则创建购物车
            cart=new Carts(null,userId, LocalDateTime.now(),LocalDateTime.now());
            cartMapper.insert(cart);
        }else{ //有购物车更新购物车的时间
            cart.setUpdatedAt(LocalDateTime.now());
            cartMapper.update(cart);
        }

        //查询购物车项中是否有当前商品
        CartItems cartItem =cartItemMapper.getCartItemByProductIdAndCartId(productId,cart.getCartId());
        if(cartItem==null){ //购物车项中没有当前物品，则创建购物车项
            cartItem=new CartItems();
            cartItem.setCartId(cart.getCartId());
            cartItem.setProductId(productId);
            cartItem.setQuantity(1);
            cartItem.setAddedAt(LocalDateTime.now());

            log.info("调用商品服务，获取商品信息{},{}",userId,productId);
            log.info("创建购物车项{}",cart);
            log.info("调用商品服务，获取商品信息{}",cartItem);

            return cartItemMapper.insert(cartItem);
        }else{ //有的话，数量加1
            cartItem.setQuantity(cartItem.getQuantity()+1);
            return cartItemMapper.update(cartItem);
        }
    }


    /*
     * 根据用户id获取购物车列表
     * */
    @Override
    public List<CartVO> getCartList(Long userId) {
        Carts cartByUserId = cartMapper.getCartByUserId(userId);
        if(cartByUserId==null){
            log.info("购物车为空1");
             return null;
        }
        //获取购物车列表
        List<CartVO> cartList = cartItemMapper.getCartList(cartByUserId.getCartId());

        if(cartList==null || cartList.size()==0){
            log.info("购物车为空2");
            return null;
        }
        //补充商品信息
        for (CartVO cartDto : cartList) {
            //跨模块调用，需要feign调用商品服务
            log.info("调用商品服务，获取商品信息{}",cartDto.getProductId());
            ProductVO productVO = productFeignClient.getProductByProductId(cartDto.getProductId()).getBody();
            if(productVO==null) continue;
            Products product = productVO.getProduct();

            cartDto.setProductName(product.getProductName()); //商品名称
            cartDto.setDescription(product.getDescription()); //商品描述
            cartDto.setImage(product.getImage()); //商品图片
            cartDto.setPrice(product.getPrice()); //商品价格
        }

        return cartList;
    }


    /*
     * 增加一个商品
     *
     * */
    @Override
    public Integer addOne(Long productId, Long userId) {
        Carts cart = cartMapper.getCartByUserId(userId); //获取购物车
        //通过商品和购物车id查询购物车项
        CartItems cartItem = cartItemMapper.getCartItemByProductIdAndCartId(productId, cart.getCartId());
        cartItem.setQuantity(cartItem.getQuantity()+1);
        return cartItemMapper.update(cartItem);
    }


    /*
     * 减少一个物品
     * */
    @Override
    public Integer subOne(Long productId, Long userId) {
        Carts cart = cartMapper.getCartByUserId(userId); //获取购物车
        //通过商品和购物车id查询购物车项
        CartItems cartItem = cartItemMapper.getCartItemByProductIdAndCartId(productId, cart.getCartId());
        cartItem.setQuantity(cartItem.getQuantity()-1);
        if(cartItem.getQuantity()<=0){
            log.info("删除购物车项{}",cartItem);
            return cartItemMapper.delete(cartItem.getItemId());
        }
        return cartItemMapper.update(cartItem);
    }


    /*
     *
     * 删除购物车中的商品
     * */
    @Override
    public Integer deleteCart(Long productId, Long userId) {
        Carts cart = cartMapper.getCartByUserId(userId); //获取购物车
        //通过商品和购物车id查询购物车项
        CartItems cartItem = cartItemMapper.getCartItemByProductIdAndCartId(productId, cart.getCartId());
        return cartItemMapper.delete(cartItem.getItemId());
    }


    /*
     * 获取购物车的id
     * */
    @Override
    public Long getCartId(Long userId) {
        return cartMapper.getCartByUserId(userId).getCartId();
    }
}